<p><strong>ClickHouse</strong></p>

<p>必须先选择 MySQL 的表后，再选择 ClickHouse 插件，再选择 ClickHouse 库表的时候，如果ClickHouse表字段和MySQL表字段一致的情况下会自动填充</p>
<p>在没有选择 ClickHouse 数据表的时候,在同步过程中,将会根据数据类型自动创建ClickHouse表结构</p>
<p>假如没有选择ClickHouse 数据库名,则会根据 MySQL 里的数据库名，自动创建表( <strong style="color: #F00">只有有数据同步的时候,才会自动建表,没有数据同步之前，是不会自动建表的</strong> )</p>
<p>假如选择了ClickHouse 数据库名，没有选择表名,则会自动创建根据字段类型自动创建表</p>

<p><strong>自动创建表 规则</strong></p>

<p>会被强制转成 日志模式-追加(InsertAll) 同步模式</p>
<p>自动创建表为  ReplacingMergeTree 引擎</p>
<p>会自动新新增 bifrost_data_version,binlog_event_type 两个字段，对应 {$BifrostDataVersion},{$EventType} 标签</p>
<p>源端少了或者多了字段 ，并与 ClickHouse 表字段对应不上,ClickHouse 里的字段数据按自动填充默认值</p>
<p>源端没有自增字段的表，会自动放弃该表的同步</p>
<p>在设置 FilterQuery : False 的时候，支持 DDL 同步</p>

<p>&nbsp;</p>
<p>ClickHouse 对应用MySQL里的存储类型</p>
<p>括号里的代表是ClickHouse里的存储类型</p>
<p>TINYINT ( Int8 | UInt8 ) , SMALLINT ( Int16 | UInt16 ) , MEDIUMINT ( Int32 | UInt32 ), INT ( Int32 | UInt32 ) , BIGINT ( Int64 | UInt64 )<p>
<p>FLOAT ( Float64 ) , DOUBLE ( Float64 ) ,REAL ( Float64 )</p>
<p>NUMERIC( Float64 )</p>
<p>DECIMAL( DECIMAL32 ==> Decimal32 , DECIMAL64 ==> Decimal64 , DECIMAL128 | DECIMAL256 ==> String )</p>
<p>DATE ( Date )</p>
<p>TIME ( String ) </p>
<p>YEAR ( Int16 ) </p>
<p>DATETIME , TIMESTAMP   ( DateTime )</p>
<p>CHAR , VARCHAR ( String ) </p>
<p>TEXT , TINYTEXT , MEDIUMINTTEXT , LONGTEXT ( String )</p>
<p>BLOB, TINYBLOB , MEDIUMINTBLOB , LONGBLOB ( String )</p>
<p>ENUM ( String )</p>
<p>SET ( String )</p>
<p>BIT ( Int64 )</p>
<p>BOOL ( Int8 )</p>
<p>JSON ( String )</p>
<p>&nbsp;</p>

<p><strong>LowerCaseTableNames 参数</strong></p>
<p>0(不转) : 按源表大小写直接创建表</p>
<p>1(小写) : 库表名及字段转成小写</p>
<p>2(大写) : 库表名及字段转成大写</p>
<p>&nbsp;</p>

<p><strong>连接配置</strong></p>

<p>eg  : tcp://127.0.0.1:9000?Database=test&username=&compress=true</p>

<p><strong>同步方式</strong></p>
        
<p>
    <strong>普通模式(Normal) : </strong>
</p>

<p>源insert,update,delete, 目标库也对应insert,update,delete , 建议 ClickHouse 表中新增一个名为 bifrost_data_version 的字段，使用{$BifrostDataVersion} 标签，用于异步删除数据安全</p>

<p>
    <strong>日志模式-追加(InsertAll) : </strong>
</p>

<p>将DELETE ,UPDATE 转成 INSERT 语句往 ClickHouse 新增一条记录</p>
<p>这个操作,在ClickHouse 表里新增一个叫 EventType(String) 的字段, 在配置同步的时候, EventType 字段 在input 框中 填写 {$EventType} 标签 </p>

<p>这个操作是将 数据源里的操作记录,全打到 ClickHouse 里进行存储</p>


<p>
    <strong>日志模式-UPDATE(LogUpdate) : </strong>
</p>

<p>将DELETE ,UPDATE 转成 INSERT 语句往 ClickHouse 新增一条记录</p>
<p>这个操作,在ClickHouse 表里新增一个叫 EventType(String) 的字段, 在配置同步的时候, EventType 字段 在input 框中 填写 {$EventType} 标签 </p>

<p>这个操作是将 数据源里的操作记录,全打到 ClickHouse 里进行存储</p>

<p><strong>标签</strong></p>

<p>{$Timestamp} : 同步的时间戳,并不是 Binlog 发生的时间</p>
<p>{$EventType} : 事件类型,insert delete update 三个字符串</p>

<p>{$BinlogTimestamp} : Binlog记录的时间戳</p>
<p>{$BinlogFileNum} : Binlog文件编号,并不是 整个Binlog文件名,比如 binlog 文件是 mysql-bin.000001 那这个 BinlogFileNum 的值 是1</p>
<p>{$BinlogPosition} : Binlog position 位点</p>
<p>{$BifrostDataVersion} : 数据版本号，字段类型必须 为 Int64 或者 UInt64 ，异步删除的时候会用到，保证数据安全</p>

<p><strong>自动过滤规则(普通同步方式)</strong></p>

<p>假如同一个主键的数据，在同一批次刷数据，会自动过滤多余操作</p>

<p>&nbsp;</p>
<p>1. 假如 id = 1 这条数据，连接有 insert ,delete ,update 操作</p>
<p>则只会执行最后的 update 操作，不会执行前面insert 及 delete操作</p>

<p>&nbsp;</p>
<p>2. 假如 id = 1 这条数据，连接有 insert ,delete ,insert ,delete 顺序操作</p>
<p>则只会执行最后的 delete 操作一次，不会执行 insert</p>

<p>&nbsp;</p>
<p>update 操作是转换成 delete 再 insert 两次操作 </p>

<p>&nbsp;</p>
<p><strong>备注</strong></p>

<p>ClickHouse 18+ 版本</p>
<p>假如源端是 decimal或者 varchar 等字符串类型, 目标端ClickHouse 是 Float32,Float64 或者 Decimal 类型,数据类型转换,可能存在精度精失的,如果要确保精度不丢失,ClickHouse 端使用 String 类型</p>
<p>假如目标字段是Date,DateTime类型,数据源为空字符串将强制转成 Date,DateTime 默认值</p>
<p>假如数据源是String类型，Ck表结构是 Int 或者 Float 类型，数据类型转换失败，并不报错，将强制转换成 0 或者 0.00</p>
<p>BatchSize参数代表累积多少条数据刷一次数据到ClickHouse，假如一直没有数据从 MySQL 过来，则默认5秒超时，也会进行刷一次</p>
<p>{$BifrostDataVersion} 标签的字段 必须为 Int64 或者 UInt64 数据类型</p>
